package de.unicornEntertainment.stundenplanapp.threadTools;

import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import de.unicornEntertainment.stundenplanapp.R;
import de.unicornEntertainment.stundenplanapp.blockzeiten.BlockzeitenActivity;
import de.unicornEntertainment.stundenplanapp.util.JSONParser;

public class MyAsyncTask_Blockzeiten extends AsyncTask {

	// Globale Deklaration
	private BlockzeitenActivity context;
	private JSONArray schulbloecke;
	
	
	// JSON Nodes
	private static final String TAG_BLOECKE = "block";
	private static final String TAG_IDBLOCK = "idBlock";
	private static final String TAG_BLOCKART = "blockart";
	private static final String TAG_BLOCK = "block";
	private static final String TAG_BLOCKZEITEN = "blockzeiten";
	private static final String TAG_BLOCKDATUM_AB_JAHR = "blockdatum_ab_jahr";
	
	private static String url = "http://gruppef.green-lagoon.de/blockzeiten.php";
	
	public MyAsyncTask_Blockzeiten(BlockzeitenActivity context) {
		this.context = context;
	}
	
	/**
	 * Hintergrundverarbeitung in ausgelagertem Thread
	 */
	@Override
	protected Object doInBackground(Object... arg0) {
		
		try {
			// JSON Parser instanziieren
			JSONParser jParser = new JSONParser();
			
			// JSON als String von URL abgreifen
			JSONObject bloecke = jParser.getJSONFromUrl(url);
			
			System.out.println("JSON: " + bloecke.toString());
			
			// JSON-Array mit allen Blöcken abrufen
            schulbloecke = bloecke.getJSONArray(TAG_BLOECKE);
            
            System.out.println("Anzahl Blöcke im JSON-Array: " + schulbloecke.length());
             
            String merkBlockart = "";
            
            // Über alle Blöcke iterieren
            for(int i = 0; i < schulbloecke.length(); i++){
                JSONObject block = schulbloecke.getJSONObject(i);
                 
                // Jedes JSON-Item in eine Variable stellen
                String idBlock = block.getString(TAG_IDBLOCK);
                String blockart = block.getString(TAG_BLOCKART);
                String einzelblock = block.getString(TAG_BLOCK);
                String blockzeiten = block.getString(TAG_BLOCKZEITEN);
                String blockdatum_ab_jahr = block.getString(TAG_BLOCKDATUM_AB_JAHR);
                 
                 
                // Eine neue HashMap erzeugen
                HashMap<String, String> map = new HashMap<String, String>();
                
                // Block Überschriften einbauen
                if (!merkBlockart.equals(blockart)) {
                	
                	// Lokale Deklaration
                	HashMap<String, String> map2 = new HashMap<String, String>();
                	String typBlock = "";
                	
                	if (blockart.equals("1")) {
						typBlock = "Kurzblöcke " + block.getString(TAG_BLOCKDATUM_AB_JAHR);
					}
                	else if (blockart.equals("2")) {
						typBlock = "Langblöcke " + block.getString(TAG_BLOCKDATUM_AB_JAHR);
					}
                	
                	System.out.println("Überschrift: " + typBlock);
                	// Überschrift in HashMap schreiben
					map2.put(TAG_BLOCKZEITEN, typBlock);
					context.getBlockzeitenlist().add(map2);
				}
                 
                // adding each child node to HashMap key => value
                map.put(TAG_IDBLOCK, idBlock);
                map.put(TAG_BLOCKART, blockart);
                map.put(TAG_BLOCK, einzelblock);
                map.put(TAG_BLOCKZEITEN, (einzelblock + ": " + blockzeiten));
                map.put(TAG_BLOCKDATUM_AB_JAHR, blockdatum_ab_jahr);
                
                System.out.println("HashMap-Inhalt: " + map);
 
                // HashMap zu ArrayList hinzufügen
                context.getBlockzeitenlist().add(map);
                Log.d("AsynTask", "HashMap: " + i);
                
                merkBlockart = blockart;
			}
		}
		catch(JSONException e) {
			e.printStackTrace();
			
			// Dialog im Fehlerfall entlassen
			context.getPrg().dismiss();
		}
		return null;
	}

	/**
	 * Wird nach der Hintergrundarbeit ausgeführt.
	 */
	@Override
	protected void onPostExecute(Object result) {
		
		/**
         * Die Daten aus den JSON-Objekten an den Adapter übergeben.
         * */
        context.setAdapter(new SimpleAdapter(context, context.getBlockzeitenlist(),
                R.layout.blockzeiten_listview_row,
                new String[] {TAG_BLOCKZEITEN}, new int[] {
                        R.id.blockzeiten_listview_row_zeitraum}));
 
        // Adapter in der ListView registrieren 
        context.getBlockliste().setAdapter(context.getAdapter());

        // Dialog entlassen
        context.getPrg().dismiss();
        
        
        
//        // selecting single ListView item
//        context.getBlockliste().setOnItemClickListener(new OnItemClickListener() {
// 
//            @Override
//            public void onItemClick(AdapterView<?> parent, View view,
//                    int position, long id) {
//                // Werte auslesen und zuweisen
//                String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
//                 
//                // Starting new intent
//                Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
//                in.putExtra(TAG_NAME, name);
//                in.putExtra(TAG_EMAIL, cost);
//                in.putExtra(TAG_PHONE_MOBILE, description);
//                startActivity(in);
//            }
//        });
	}
}
